/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package transervfx.Logica;

import java.util.List;
import transervfx.Dato.DAO.ClienteDAO;
import transervfx.Dato.DAO.ClienteFisicoDAO;
import transervfx.Dato.DAO.ClienteJuridicoDAO;
import transervfx.Dato.Entidad.Cliente;
import transervfx.Dato.Entidad.Fisico;
import transervfx.Dato.Entidad.Juridico;
import transervfx.Dato.Entidad.Localidad;
import transervfx.Dato.Entidad.Lugar;
import transervfx.Dato.Entidad.LugarPersonalFrecuente;

/**
 *
 * @author silvi
 */
public class GestorCliente {

    private static GestorCliente INSTANCE = null;

    private GestorCliente() {
    }

    private synchronized static void createInstance() {
        if (INSTANCE == null) {
            INSTANCE = new GestorCliente();
        }
    }

    public static GestorCliente getInstance() {
        if (INSTANCE == null) {
            createInstance();
        }
        return (GestorCliente) INSTANCE;
    }

    public void guardarCliente(Cliente c) {
        ClienteDAO.getInstance().persist(c);
    }

    public void actualizarCliente(Cliente c) {
        ClienteDAO.getInstance().update(c);
    }

    public void eliminarCliente(Cliente c) {
        ClienteDAO.getInstance().remove(c);
    }

    public Cliente findById(Long nro_cliente) {
        return ClienteDAO.getInstance().findById(nro_cliente);
    }

    public List<Cliente> findAll() {
        return ClienteDAO.getInstance().findAll();
    }

    public List<Fisico> findAllFisicos() {
        return ClienteDAO.getInstance().findAllFisico();
    }

    public List<Juridico> findAllJuridicos() {
        return ClienteDAO.getInstance().findAllJuridico();
    }

    public boolean existeClienteFisico(String tipoDoc, Integer nroDoc) {
        Fisico r = ClienteDAO.getInstance().findFisicoByTipoDocAndNroDoc(tipoDoc, nroDoc);
        if (r == null) {
            return false;
        } else {
            return true;
        }
    }

    public boolean existeClienteJuridico(Integer nroDoc) {
        Cliente r = ClienteDAO.getInstance().findJuridicoByCuit(nroDoc);
        if (r == null) {
            return false;
        } else {
            return true;
        }
    }

    public Cliente findByCompleto(Cliente clienteSeleccionado) {
        return ClienteDAO.getInstance().findByCompleto(clienteSeleccionado);
    }

    public Fisico findFisicoByCompleto(Fisico clienteFisicoSeleccionado) {
        return ClienteDAO.getInstance().findFisicoByCompleto(clienteFisicoSeleccionado);
    }

    public Juridico findJuridicoByCompleto(Juridico clienteJuridicoSeleccionado) {
        return ClienteDAO.getInstance().findJuridicoByCompleto(clienteJuridicoSeleccionado);
    }


    public Lugar buscarLugar(Long id) {
        return ClienteDAO.getInstance().findLugar(id);
    }

    //hasta aca pude llegar"! jee no se como lo vas a usar aca
    //avisame cuando vuelvas
    public List<Cliente> buscarPorFiltro(String cliente, String tipoDocumento, Integer numeroDocumento, Integer cuit, String condicionFrenteIva, int ini, int fin) {
        //donde llamo a esto?
       return ClienteDAO.getInstance().buscarPorFiltroRango(cliente,tipoDocumento, numeroDocumento,cuit, condicionFrenteIva, ini, fin);
    
    }

    
    public Long numeroDeClientesFiltrados(String cliente, String tipoDocumento, Integer numeroDocumento, Integer cuit, String condicionFrenteIva ) {
        //me falto agregar el tipo y nro de doc, no lo pongo luego lo ponemos en la consultaok
        return ClienteDAO.getInstance().cantidadClientePorFiltroRango(cliente, tipoDocumento, numeroDocumento,cuit, condicionFrenteIva);
    }
    
    
    
}
